iT邦幫忙

2025 iThome 鐵人賽

DAY 8
0
Security

現在是pwn的天下!系列 第 8

【Day-8】ASLR & PIE

  • 分享至 

  • xImage
  •  

ASLR (Address Space Layout Randomization)

ASLR是一個kernel的保護機制,預設的情況下通常都是開的

  • 每次動態載入base都是隨機的
  • library
  • stack
  • heap

ldd

ldd 是 Linux 系統中的一個命令,用於顯示可執行文件所依賴的shared libraries。這些共享庫是程序運行所需要的外部代碼庫,通常包括操作系統提供的標準庫以及應用程序中使用的其他庫

主要功能

  • 使用 ldd 可以列出一個可執行文件在運行時所需的所有共享庫。這有助於了解一個程序運行時需要哪些外部函式庫,並檢查是否存在缺失的庫文件
  • ldd 會顯示共享庫的具體位置,這樣可以確定庫是否已經正確安裝並且能被程序加載

我拿一個chal做例子,當我們ldd一支library的時候,可以看到library(libc.so.6)是被mapping到0xf7cbb000
https://ithelp.ithome.com.tw/upload/images/20250812/20172088FxLT2HG2tR.png
但是,我如果再做第二次呢? 就變不一樣了
https://ithelp.ithome.com.tw/upload/images/20250812/20172088EkDLKsplCL.png
在做第三遍,又不一樣了
https://ithelp.ithome.com.tw/upload/images/20250812/201720887hPnS8hjlQ.png
可以看到以上上面三個MAP到的地址都是不一樣的,每次被載入都會在不同的位址,這個就是ASLR的保護機制

PIE (Position Independent Executable)

PIE可以看做是一種跟ASLR搭配的保護機制

  • 籠統的講可以說它是ELF code base & data section map到vitual address的ASLR
  • 如果PIE有開啟,每次的code base都會不一樣 (隨機化) ,否則固定
  • 會被記錄在ELF的檔案裏面

拿之前打過的題目為例:
checksec:
https://ithelp.ithome.com.tw/upload/images/20250812/20172088RPRlQk9Fb9.png
exp.py:
https://ithelp.ithome.com.tw/upload/images/20250812/20172088ma87ED9wgd.png
我們可以發現他的leak都是0x55開頭,這也是辨識PIE的一種方法,如果之後再打題目的時候也可以去理解要怎麼利用漏洞拿到PIE base


上一篇
【Day-7】2025 CDX決賽心得
下一篇
【Day-9】Lazy binding & GOT
系列文
現在是pwn的天下!30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言